package io.mft.runtime.function;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.mft.api.domain.Api;
import io.mft.api.domain.ApiFunctionType;
import io.mft.runtime.cache.ApiCache;
/**
 * API初始化处理器
 * @说明：TODO
 * @类型名称：ApiFunctionInitor
 * @创建者: 胡常建  
 * @创建时间: 2021年2月21日 下午5:43:29
 * @修改者: 胡常建  
 * @修改时间: 2021年2月21日 下午5:43:29
 */
public abstract class ApiFunctionInitor {
	private Logger logger = LoggerFactory.getLogger(ApiFunctionInitor.class);
	private ApiCache apiCache;
	public ApiFunctionInitor(ApiCache apiCache) {
		this.apiCache=apiCache;
	}
	public ApiCache getApiCache() {
		return apiCache;
	}
	public void init(Api api) {
		try {
			if (api.getApiFunctionType()==apiFunctionType()) {
				ApiExecutorObject apiExecutorObject=initApiExecutorObject(api);
				if (apiExecutorObject!=null) {
					apiCache.addApiExecutorObject(apiExecutorObject);
					logger.warn("加载初始化API元数据->>>系统:"+api.getModule().getSystem().getName()+"->>>模块:"+api.getModule().getName()+"->>>KEY:"+api.getKey()+"->>>名称:"+api.getName());	
				}			
			}			
		} catch (Exception e) {
			logger.error("系统["+api.getModule().getSystem().getName()+"]模块["+api.getModule().getName()+"]接口["+api.getKey()+"]["+api.getName()+"]初始化异常",e);
		}

	}
	protected abstract ApiFunctionType apiFunctionType();
	protected abstract ApiExecutorObject initApiExecutorObject(Api api) ;
	
}
